home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / snip9503 / rg_isort.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-14  |  1.0 KB  |  38 lines

  1. /*
  2. ** isort()  --  insertion sort
  3. **
  4. ** Raymond Gardner   public domain   2/93
  5. **
  6. ** qsort() compatible, but uses insertion sort algorithm.
  7. */
  8.  
  9. #include <stddef.h>             /* for size_t definition */
  10.  
  11. void isort(void *base, size_t nmemb, size_t size,
  12.             int (*comp)(const void *, const void *))
  13. {
  14.       char *i, *j, *lim;
  15.  
  16.       lim = (char *)base + nmemb * size;    /* pointer past end of array */
  17.       for ( j = (char *)base, i = j+size; i < lim; j = i, i += size )
  18.       {
  19.             for ( ; comp((void *)j, (void *)(j+size)) > 0; j -= size )
  20.             {
  21.                   char *a, *b;
  22.                   char tmp;
  23.                   size_t k = size;
  24.  
  25.                   a = j;
  26.                   b = a + size;
  27.                   do
  28.                   {
  29.                         tmp = *a;
  30.                         *a++ = *b;
  31.                         *b++ = tmp;
  32.                   } while ( --k );
  33.                   if ( j == (char *)base )
  34.                         break;
  35.             }
  36.       }
  37. }
  38.